// @ts-check
const pkg = require("./package.json")
const withBundleAnalyzer = require("@next/bundle-analyzer")({
  enabled: process.env.ANALYZE === "true",
})
const execSync = require("child_process").execSync

const lastCommitCommand = "git rev-parse HEAD"

module.exports = withBundleAnalyzer({
  output: "standalone",
  env: {
    APP_DESCRIPTION: pkg.description,
  },
  experimental: {
    scrollRestoration: true,
    serverComponentsExternalPackages: ["rehype-react"],
  },
  productionBrowserSourceMaps: true,

  webpack(config) {
    config.resolve.fallback = { fs: false } // polyfill node-id3

    // https://github.com/WalletConnect/walletconnect-monorepo/blob/7716e164281c2f531145d682c3658f761fa0a823/providers/universal-provider/src/utils/deepLinks.ts#L39
    // @walletconnect/universal-provider imports react-native conditionally.
    // Since this is a NextJS app, simply mark it as external to avoid the webpack bundling warning.
    config.externals.push("react-native")

    // https://github.com/WalletConnect/walletconnect-monorepo/issues/1908#issuecomment-1487801131
    config.externals.push("pino-pretty", "lokijs", "encoding")

    // https://github.com/WalletConnect/walletconnect-utils/blob/b7d7dc003c25dd33ef74c2fac483140f71a51d86/jsonrpc/http-connection/src/http.ts#L2
    // `@walletconnect/jsonrpc-http-connection` imports `cross-fetch` to support fetch in Node.js. It's unnecessary for Next.JS app.
    config.resolve.alias["cross-fetch"] = require.resolve(
      "next/dist/build/polyfills/fetch/index.js",
    )

    // https://github.com/kkomelin/isomorphic-dompurify/issues/54
    // Fix isomorphic-dompurify in app router
    config.externals = [...config.externals, "jsdom", "sharp"]

    return config
  },

  images: {
    dangerouslyAllowSVG: true,
    contentSecurityPolicy:
      "default-src 'self'; script-src 'none'; sandbox; style-src 'unsafe-inline';",
    remotePatterns: [
      { hostname: "**" },
      { protocol: "https", hostname: "pbs.twimg.com" },
      { protocol: "https", hostname: "abs.twimg.com" },
    ],
    loader: "custom",
    loaderFile: "./image-loader.js",
  },

  async generateBuildId() {
    return execSync(lastCommitCommand).toString().trim()
  },

  serverRuntimeConfig: {
    ENV_REDIS_URL: process.env.REDIS_URL,
    ENV_REDIS_EXPIRE: process.env.REDIS_EXPIRE,
    ENV_REDIS_REFRESH: process.env.REDIS_REFRESH,
    ENV_NFTSCAN_API_KEY: process.env.NFTSCAN_API_KEY,
    ENV_OPENAI_API_KEY: process.env.OPENAI_API_KEY,
    ENV_ANONYMOUS_ACCOUNT_PRIVATEKEY: process.env.ANONYMOUS_ACCOUNT_PRIVATEKEY,
    ENV_PORTFOLIO_GITHUB_TOKEN: process.env.PORTFOLIO_GITHUB_TOKEN,
  },

  async headers() {
    return [
      {
        source: "/.well-known/apple-app-site-association",
        headers: [
          {
            key: "Content-Type",
            value: "application/json",
          },
        ],
      },
    ]
  },
  staticPageGenerationTimeout: 3600,

  async redirects() {
    return [
      {
        source: "/sitemap.txt",
        destination: "/sitemap.xml",
        permanent: true,
      },
      {
        source: "/sitemap.xml.gz",
        destination: "/sitemap.xml",
        permanent: true,
      },
      {
        source: "/sitemap_index.xml",
        destination: "/sitemap.xml",
        permanent: true,
      },
      {
        source: "/sitemaps.xml",
        destination: "/sitemap.xml",
        permanent: true,
      },
    ]
  },
})
